

public class Queue{

    private Nodo primero;
    private Nodo ultimo;
    private int cant;

    public Queue(){
        this.primero = null;
        this.ultimo = null;
        this.cant = 0;
    }

    public boolean offer(Object o){
        cant++;
        if (primero == null){
            primero = ultimo = new Nodo(o, null, null);
            return true;
        }
        ultimo = new Nodo(o, null, ultimo);
        ultimo.getSiguiente().setAnterior(ultimo);
        return true;
    }

    public Object poll(){
        if (primero == null)
            return null;
        Object aux = primero.getObject();
        primero = primero.getAnterior();
        if (primero != null)
            primero.setSiguiente(null);
        cant--;
        return aux;
    }

    public Object peek(){
        if (primero == null)
            return null;
        return primero.getObject();
    }

    public int size(){
        return cant;
    }

}

class Nodo {
    private Object object;
    private Nodo anterior;
    private Nodo siguiente;

    public Nodo(Object o, Nodo anterior, Nodo siguiente){
        this.object = o;
        this.anterior = anterior;
        this.siguiente = siguiente;
    }

    public void setObject(Object obj){
        this.object = obj;
    }

    public void setAnterior(Nodo n){
        this.anterior = n;
    }

    public void setSiguiente(Nodo n){
        this.siguiente = n;
    }

    public Object getObject(){
        return object;
    }

    public Nodo getAnterior(){
        return anterior;
    }

    public Nodo getSiguiente(){
        return siguiente;
    }
}